﻿#pragma once
#include "stdafx.h"

/*
最长公共前缀  简单

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀，返回空字符串 ""。

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"
示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

想法：这个题目出来后就发现，直接从0位置开始来比拼，一样就加到str中，知道不等。当第一个为都不等的情况，str不赋值
时间复杂度O(mn) m平均长度数，n为个数。
 横向想法，第一个与第二个找到公共字符串，以此向后面找，知道遍历到最后一个。找到公共的部分向下找
*/


string longestCommonPrefix(vector<string>& strs) 
{
	if (!strs.size())
	{
		return "";
	}

	int length = strs[0].size(); //获取第一个长度
	int numOfstrs = strs.size(); //获取vector 的存储个数

	for (int i = 0; i<length; i++)
	{
		char one = strs[0][i]; //获取第一字符串中第i个字符
		for (int j =1; j<numOfstrs; j++)
		{
			if (i == strs[j].size() || strs[j][i] !=one)
			{
				return strs[0].substr(0, i);
			}
		}
	}
	//当把第一个数都遍历完了，表示第一个数就是最小公共前缀
	return strs[0];
}

void testlongestCommonPrefix()
{
	vector<string> strs = { "flower","flow","flight" };
	string str = longestCommonPrefix(strs);
	cout << "the public string is  " << str << endl;
}

/*
结果：
the public string is  fl
*/


